package view;

import controller.Controleur;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import model.Call;
import model.CallActive;

/**
 * Classe representant une conversation active dans la liste
 * @author Lefevre, Thoue
 */
public class JPanelCallActive extends JPanel {

    private Controleur controleur;
    private Call callProfil;
    private JLabel pauseButton;
    private JLabel muteButton;
    private JLabel chatButton;
    private JLabel raccrocherButton;
    private ImageIcon iconPause;
    private ImageIcon iconMute;
    private ImageIcon iconChat;
    private ImageIcon iconRaccrocher;
    /**
     * Constructeur
     * @param controleur controleur de l'application
     * @param callActive Une conversation active
     */
    public JPanelCallActive(Controleur controleur, CallActive callActive) {
        this.controleur = controleur;
        this.callProfil = callActive;
        this.setOpaque(false);
        this.setLayout(new FlowLayout());
        this.setPreferredSize(new Dimension(220, 25));

        iconChat = new ImageIcon(getClass().getResource("chat16.png"));
        chatButton = new JLabel(iconChat);
        chatButton.setPreferredSize(new Dimension(16, 16));
        chatButton.addMouseListener(new ChatListenner(callActive));
        this.add(chatButton);

        JPanel panelNom = new JPanel();
        panelNom.setPreferredSize(new Dimension(120, 25));
        panelNom.setOpaque(false);
        panelNom.add(new JLabel(callActive.getUser().getNom() + " " + callActive.getUser().getPrenom()));
        this.add(panelNom);

        if (((CallActive) callActive).getPause() == true) {
            iconPause = new ImageIcon(getClass().getResource("play16.png"));
        } else {
            iconPause = new ImageIcon(getClass().getResource("pause16.png"));
        }
        pauseButton = new JLabel(iconPause);
        pauseButton.setPreferredSize(new Dimension(16, 16));
        pauseButton.addMouseListener(new PauseListenner(callActive));
        this.add(pauseButton, RIGHT_ALIGNMENT);

        if (((CallActive) callActive).getMute() == true) {
            iconMute = new ImageIcon(getClass().getResource("volumeS16.png"));
        } else {
            iconMute = new ImageIcon(getClass().getResource("volumeN16.png"));
        }
        muteButton = new JLabel(iconMute);
        muteButton.setPreferredSize(new Dimension(16, 16));
        muteButton.addMouseListener(new MuteListenner(callActive));
        this.add(muteButton);

        iconRaccrocher = new ImageIcon(getClass().getResource("stop16.png"));
        raccrocherButton = new JLabel(iconRaccrocher);
        raccrocherButton.setPreferredSize(new Dimension(16, 16));
        raccrocherButton.addMouseListener(new RaccrocherListenner(callActive));
        this.add(raccrocherButton);

        validate();

    }
    /**
     * Classe representant le listenner du bouton pause
     */
    class PauseListenner extends MouseAdapter {

        private CallActive callActive;
        /**
         * Constructeur
         * @param callActive call courrante
         */
        public PauseListenner(CallActive callActive) {
            this.callActive = callActive;
        }
        /**
         * Evenement de clique sur le bouton pause
         * @param me evenement du bouton
         */
        @Override
        public void mouseClicked(MouseEvent me) {
            super.mouseClicked(me);
            if (callActive.getPause() == true) {
                callActive.setPause(Boolean.FALSE);
            } else {
                callActive.setPause(Boolean.TRUE);
            }
            controleur.setPause(callActive.getUser(), callActive.getPause());
        }
        /**
         * Evenement au survol du bouton pour changer l'image
         * @param e evenement de survol
         */
        @Override
        public void mouseEntered(MouseEvent e) {
            if (callActive.getPause() == true) {
                pauseButton.setIcon(new ImageIcon(getClass().getResource("play16-light.png")));
            } else {
                pauseButton.setIcon(new ImageIcon(getClass().getResource("pause16-light.png")));
            }
        }
        /**
         * Evenement a la fin du survol du bouton pour changer l'image
         * @param e evenement de fin du survol
         */
        @Override
        public void mouseExited(MouseEvent e) {
            if (callActive.getPause() == true) {
                pauseButton.setIcon(new ImageIcon(getClass().getResource("play16.png")));
            } else {
                pauseButton.setIcon(new ImageIcon(getClass().getResource("pause16.png")));
            }
        }
    }
    /**
     * Classe representant le listener du bouton mute
     */
    class MuteListenner extends MouseAdapter {

        private CallActive callActive;
        /**
         * Constructeur
         * @param callActive call courrante
         */
        public MuteListenner(CallActive callActive) {
            this.callActive = callActive;
        }
        /**
         * Evenement du clique sur le bouton
         * @param me evenement
         */
        @Override
        public void mouseClicked(MouseEvent me) {
            super.mouseClicked(me);
            if (callActive.getMute() == true) {
                callActive.setMute(Boolean.FALSE);
            } else {
                callActive.setMute(Boolean.TRUE);
            }
            controleur.setMute(callActive.getUser(), callActive.getMute());
        }
        /**
         * Evenement au survol du bouton pour changer l'image
         * @param e evenement de survol
         */
        @Override
        public void mouseEntered(MouseEvent e) {
            if (callActive.getMute() == true) {
                muteButton.setIcon(new ImageIcon(getClass().getResource("volumeS16-light.png")));
            } else {
                muteButton.setIcon(new ImageIcon(getClass().getResource("volumeN16-light.png")));
            }
        }
        /**
         * Evenement de fin du survol du bouton pour changer l'image
         * @param e evenement de fin de survol
         */
        @Override
        public void mouseExited(MouseEvent e) {
            if (callActive.getMute() == true) {
                muteButton.setIcon(new ImageIcon(getClass().getResource("volumeS16.png")));
            } else {
                muteButton.setIcon(new ImageIcon(getClass().getResource("volumeN16.png")));
            }
        }
    }
    /**
     * Classe representant le listener du bouton raccrocher
     */
    class RaccrocherListenner extends MouseAdapter {

        private CallActive callActive;
        /**
         * Constructeur
         * @param callActive conversation courrante
         */
        public RaccrocherListenner(CallActive callActive) {
            this.callActive = callActive;
        }
         /**
         * Evenement de clique sur le bouton pour terminer la conversation
         * @param e evenement de survol
         */
        @Override
        public void mouseClicked(MouseEvent me) {
            super.mouseClicked(me);
            controleur.raccrocher(callActive.getUser());
        }
        /**
         * Evenement au survol du bouton pour changer l'image
         * @param e evenement de survol
         */
        @Override
        public void mouseEntered(MouseEvent e) {
            raccrocherButton.setIcon(new ImageIcon(getClass().getResource("stop16-light.png")));

        }
       /**
         * Evenement de fin du survol du bouton pour changer l'image
         * @param e evenement de fin de survol
         */
        @Override
        public void mouseExited(MouseEvent e) {
            raccrocherButton.setIcon(new ImageIcon(getClass().getResource("stop16.png")));
        }
    }
    /**
     * Classe representant le listener du bouton chat actif
     */
    class ChatListenner extends MouseAdapter {

        private CallActive callActive;
        /**
         * Constructeur
         * @param callActive conversation courante
         */
        public ChatListenner(CallActive callActive) {
            this.callActive = callActive;
        }
        /**
         * Evenement de clique sur le bouton pour changer le destinataire du chat
         * @param me evenement de clique
         */
        @Override
        public void mouseClicked(MouseEvent me) {
            super.mouseClicked(me);
            controleur.setUserChatActif(callActive.getUser());
        }
        /**
         * Evenement au survol du bouton pour changer l'image
         * @param e evenement de survol
         */
        @Override
        public void mouseEntered(MouseEvent e) {
            chatButton.setIcon(new ImageIcon(getClass().getResource("chat16-light.png")));

        }
       /**
         * Evenement de fin du survol du bouton pour changer l'image
         * @param e evenement de fin de survol
         */
        @Override
        public void mouseExited(MouseEvent e) {
            chatButton.setIcon(new ImageIcon(getClass().getResource("chat16.png")));
        }
    }
}
